package everydayone.twitter;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;

/**
 * @Date 2020/04/13
 * @author 王光浩
 * @Thinking 使用ArrayList<int[]> tweet：推文序列
 * 		 	  使用HashMap<Integer,HashSet<Integer>> follow：存储被关注者和关注者序列
 *     初始化：构建这两个数据结构
 *     发送推文：在 follow 中创建对应的对象，并将自己加入到该对象中
 *     检索推文：遍历 tweet 推文序列，找出最多 10 条（从后向前） id 是用户关注的人的推文
 *     关注用户：在 follow 中找到对应的 HashSet，然后将其添加到其中
 *     取消关注：在 follow 中找到对应的 HashSet，然后将其删除
 */
public class MyMethodOne {
	private ArrayList<int[]> tweet;
	private HashMap<Integer, HashSet<Integer>> follow;

	public MyMethodOne() {
		tweet = new ArrayList<int[]>();
		follow = new HashMap<Integer, HashSet<Integer>>();
	}

	public void postTweet( int userId, int tweetId ) {
		int[] content = { userId, tweetId };
		//将推特加入到 推文序列中
		tweet.add(content);
		if( !follow.containsKey(userId) ) {
			HashSet<Integer> tem = new HashSet<Integer>();
			tem.add(userId);
			follow.put(userId, tem);
		}
	}

	public List<Integer> getNewsFeed(int userId) {
		List<Integer> ret = new LinkedList<Integer>();
		if( !follow.containsKey(userId) ) return null;
		// 将前十条推特加入到 ret 中
		HashSet<Integer> id = follow.get(userId);
		int len = tweet.size()-1;
		int count = 0;
		while(count < 10 && len >= 0) {
			int[] content=tweet.get(len--);
			if(id.contains(content[0])) {
				ret.add(content[1]);
				count++;
			}
		}
		return ret;
	}

	public void follow(int followerId, int followeeId) {
		if(!follow.containsKey(followerId)) {
			follow.put(followerId, new HashSet<Integer>());
			follow.get(followerId).add(followerId);
		}
		if(!follow.get(followerId).contains(followeeId))follow.get(followerId).add(followeeId);
	}

	public void unfollow(int followerId, int followeeId) {
		if(followerId!=followeeId && follow.containsKey(followerId) && follow.get(followerId).contains(followeeId))
			follow.get(followerId).remove(followeeId);
	}
}
